package com.tedu;
import java.util.TreeSet;
/**
 * 求类型相同的随机两个数组的并集、差集，并排序输出
 */
public class UnionSetAndDifferentSet {
    public static void main(String[] args) {
        int [] ary1 = {3,2,1,4,5,6,7};
        int [] ary2 = {6,5,4,7,8,9};
//        将两个数组分别转为TreeSet集合
        TreeSet <Object> set1 = new TreeSet<>();
        TreeSet <Object> set2 = new TreeSet<>();
        for (Object o : ary1) {
            set1.add(o);
        }
        for(Object o : ary2){
            set2.add(o);
        }
//        求并集并排序输出，因为treeSet自带自然排序，所以直接打印了
        differedSet(set1, set2);
        unionSet(set1, set2);
    }
    private static void differedSet(TreeSet<Object> set1, TreeSet<Object> set2) {
        //        求差集
//        1.选出长度较短的集合，作为被遍历的集合，另一个集合用于保存差集
        TreeSet<Object> min = set1.size()<set2.size()?set1:set2;
        TreeSet<Object> max = min==set1?set2:set1;
//        2.对min进行遍历，判断元素是否被包含在max中
        for (Object o:min){
            if (max.contains(o)){
                max.remove(o);//如果max包含min中的这个元素，从max中删除该元素
            }else {
                max.add(o);//如果max中不包含min中的这个元素，添加进max中，得到差集
            }
        }
        System.out.println("差集为："+max);
    }
    private static void unionSet(TreeSet<Object> set1, TreeSet<Object> set2) {
        set1.addAll(set2);
        System.out.println("并集为："+set1);
    }
}
